package com.huangjue.backend.utils;

import java.util.*;

/**
 * 动态构建生成作业答案的提示词
 */
public class AssignmentPromptBuilder {
    // 存储提示词各部分内容
    private final Map<String, Object> sections = new LinkedHashMap<>();

    // 特殊要求列表
    private final List<String> specialRequirements = new ArrayList<>();

    // 输入输出示例
    private final List<Map.Entry<String, String>> examples = new ArrayList<>();

    /**
     * 设置作业题目
     */
    public AssignmentPromptBuilder setAssignmentTitle(String title) {
        sections.put("作业题目", title);
        return this;
    }

    /**
     * 设置语言要求
     */
    public AssignmentPromptBuilder setLanguageRequirement(String language) {
        sections.put("语言要求", language);
        return this;
    }

    /**
     * 设置输入格式
     */
    public AssignmentPromptBuilder setInputFormat(String format) {
        sections.put("输入格式", format);
        return this;
    }

    /**
     * 设置输出格式
     */
    public AssignmentPromptBuilder setOutputFormat(String format) {
        sections.put("输出格式", format);
        return this;
    }

    /**
     * 设置核心算法
     */
    public AssignmentPromptBuilder setCoreAlgorithm(String algorithm) {
        sections.put("技术栈限制", algorithm);
        return this;
    }

    /**
     * 添加特殊要求
     */
    public AssignmentPromptBuilder addSpecialRequirement(String requirement) {
        specialRequirements.add(requirement);
        return this;
    }

    /**
     * 添加输入输出示例
     */
    public AssignmentPromptBuilder addExample(String input, String output) {
        examples.add(new AbstractMap.SimpleEntry<>(input, output));
        return this;
    }

    /**
     * 构建最终提示词字符串
     */
    public String build() {
        StringBuilder prompt = new StringBuilder();

        // 添加固定标题
        prompt.append("你是一个专业的编程导师，需要帮助学生完成他们的代码作业。")
                .append("请根据以下要求生成完整、可直接运行的代码解决方案：\n\n");

        // 动态添加各部分内容
        for (Map.Entry<String, Object> entry : sections.entrySet()) {
            prompt.append("### ").append(entry.getKey()).append("\n");

            if (entry.getKey().equals("具体要求")) {
                buildRequirementsSection(prompt);
            } else {
                prompt.append(entry.getValue()).append("\n\n");
            }
        }

        // 添加输入输出示例
        if (!examples.isEmpty()) {
            prompt.append("### 输入输出示例\n");
            for (int i = 0; i < examples.size(); i++) {
                Map.Entry<String, String> example = examples.get(i);
                prompt.append("```input\n")
                        .append(example.getKey())
                        .append("\n```\n")
                        .append("```output\n")
                        .append(example.getValue())
                        .append("\n```\n\n");
            }
        }

        // 添加固定生成要求
        prompt.append("### 生成要求\n")
                .append("1. 提供完整可运行的代码文件\n")
                .append("2. 包含清晰的注释说明关键逻辑\n")
                .append("3. 使用有意义的变量名和函数名\n")
                .append("4. 处理所有边界情况和异常输入\n")
                .append("5. 在代码开头添加文件头注释：\n");

        // 添加额外说明占位符
        prompt.append("### 额外说明\n")
                .append("请严格遵循以上要求生成专业级的代码解决方案。");

        return prompt.toString();
    }

    /**
     * 构建具体要求部分
     */
    private void buildRequirementsSection(StringBuilder sb) {
        sb.append("1. 语言要求：").append(sections.get("语言要求")).append("\n");
        sb.append("2. 输入格式：").append(sections.get("输入格式")).append("\n");
        sb.append("3. 输出格式：").append(sections.get("输出格式")).append("\n");
        sb.append("4. 技术栈限制：").append(sections.get("技术栈限制")).append("\n");

        if (!specialRequirements.isEmpty()) {
            sb.append("5. 特殊要求：\n");
            for (String req : specialRequirements) {
                sb.append("   - ").append(req).append("\n");
            }
        }
        sb.append("\n");
    }


    //构建效果检测：
//    public static void main(String[] args) {
//        // 使用示例
//        AssignmentPromptBuilder builder = new AssignmentPromptBuilder()
//                .setAssignmentTitle("实现银行账户管理系统")
//                .setLanguageRequirement("Python")
//                .setInputFormat("通过命令行交互")
//                .setOutputFormat("清晰的操作菜单和结果提示")
//                .setCoreAlgorithm("使用类实现Account，支持多个账户管理和交易记录历史");
//
//
//        String prompt = builder.build();
//        System.out.println(prompt);
//    }
}